﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;

namespace ImobitechDao.Repositories
{
    public class AnuncioRepository : BaseRepository<Anuncio>, IAnuncioRepository
    {

        #region Implementação obrigatoria da classe base
        public AnuncioRepository(ImobitechEntities context) : base(context) { }

        protected override string TableName
        {
            get { return "Anuncio"; }
        }

        protected override string EntitySetName
        {
            get { return "Anuncio"; }
        }
        #endregion

        public List<Anuncio> getAllAprovado(bool aprovado, int tipo)
        {
            return (from p in _context.Anuncio
                    where p.St_Aprovado == aprovado && p.Tipo == tipo
                    select p).ToList();
        }

        public List<Anuncio> getAllAprovado(bool aprovado)
        {
            return (from p in _context.Anuncio
                    where p.St_Aprovado == aprovado
                    select p).ToList();
        }

        public List<Anuncio> getBusca(bool aprovado, int tipo, string cidade, string estado, string[] bairro, int TipoImovel, int valor, int metragem, int quartos, int garagem)
        {
            IQueryable<Anuncio> busca = (from p in _context.Anuncio
                                select p).AsQueryable();

            busca = busca.Where(p => p.Tipo == tipo);
            busca = busca.Where(p => p.St_Aprovado == aprovado);

            if (!string.IsNullOrEmpty(cidade))
                busca = busca.Where(p => p.Imovel.Cidade == cidade);

            if (!string.IsNullOrEmpty(estado))
                busca = busca.Where(p => p.Imovel.Estado == estado);

            if (TipoImovel > 0)
                busca = busca.Where(p => p.Imovel.Tipo_Imovel.Id == TipoImovel);

            if (bairro.Length > 0)
                for(int i =0; i<bairro.Length; i++)
                    busca = busca.Where(p => bairro.Contains(p.Imovel.Bairro));

            if (valor == 1)
                busca = busca.Where(p => p.Valor > 100000);
            else if (valor > 1)
                busca = busca.Where(p => p.Valor <= valor);
            // int metragem, int quartos, int garagem
            if (metragem == 1)
                busca = busca.Where(p => p.Imovel.AreaPrivada > 500);
            else if (metragem > 1)
                busca = busca.Where(p => p.Imovel.AreaPrivada <= metragem);

            if (quartos == 5)
                busca = busca.Where(p => p.Imovel.Quartos > 4);
            else if (quartos > 0)
                busca = busca.Where(p => p.Imovel.Quartos == quartos);

            if (garagem == 3)
                busca = busca.Where(p => p.Imovel.NumeroGaragem > 2);
            else if (garagem > 0)
                busca = busca.Where(p => p.Imovel.NumeroGaragem == garagem);

            //ObjectQuery oQuery = (ObjectQuery)busca;
            //string cmdSQL = oQuery.ToTraceString();
            return busca.ToList();
        }

        public List<Anuncio> getAll(int idImovel)
        {
            return (from p in _context.Anuncio
                    where p.Imovel.Id == idImovel
                    select p).ToList();
        }
    }
}